#include <iostream>

using namespace std;

//模板参数分为类型形参和非类型形参
//类型形参即：出现在模板参数列表中，跟在class或者typename之类的参数类型名称。
//非类型形参，就是用一个常量作为类(函数)模板的一个参数，在类(函数)模板中可将该参数当成常量来使用。

//注意：
//1. 浮点数、类对象以及字符串是不允许作为非类型模板参数的。
//2. 非类型的模板参数必须在编译期就能确认结果

//非类型模板参数-整形常量
//int ,size_t, char都是可以的
template<class T, int N = 10>
class my_stack
{
public:
    size_t size()
    {
        return N;
    }
private:
    T _array[N];
    size_t top;
};

int main()
{
    my_stack<int, 100> ms1;
    my_stack<int, 200> ms2;
    my_stack<size_t> ms3;
    cout << ms1.size() << endl;
    cout << ms2.size() << endl;
    cout << ms3.size() << endl;
    return 0;
}
